package com.wymobilearchitecture.demo.kt

import android.view.View
import java.util.*

fun main() {
    test1()
    test2()
}


/**
 * constructor 主构造方法
 */
class A04_constructor constructor(name : String) {

    /**
     * 次构造方法-可以声明多个
     */
    constructor(view : View,name: String) : this(name){
        println("name: $name")
    }

    constructor(view : View,name: String,index : Int) : this(name)
}


/**
 * 接口
 */
interface Study{
    val time : Int
    fun discuss()
    fun learnCourses(){
        println("kotlin Study 接口方法的实现")
    }
}

interface Eat{

    fun learnCourses(){
        println("kotlin Eat 接口方法的实现")
    }
}

class Student (override val time : Int): Study,Eat{

//    override val time : Int = 100

    override fun discuss() {

    }

    /**
     * 调用接口同名方法,需要指定类名
     */
    override fun learnCourses() {
        super<Study>.learnCourses()
    }
}

/**
 * 伴生对象
 */
class Teacher (){
    companion object{
        val student : Student = Student(300)
        fun study(){
            println("伴生对象 ${student.time}")
        }
    }
}

fun test1(){
    println(Teacher.student)
    println(Teacher.study())
}




/**
 * 不使用继承去修改父类的方法
 */
open class Goods(name: String){
    open fun print(){

    }
}

class Shop{
    private var goods : Goods? = null
    fun addGoods(goods: Goods){
        this.goods = goods;
    }
}

fun shopTest(){
    //如果超类有一个构造方法,则必须传递适当的构造方法参数
    Shop().addGoods(object :Goods("面包"){
        override fun print() {
            super.print()

        }
    })
}




/**
 * 对象声明
 * 创建一个不需要创建类文件的对象
 * */
fun test2(){
    val adHoc = object {
        val x : Int = 1
        val y : Int = 2
    }

    println(adHoc.x + adHoc.y)
}